# -*- coding: utf-8 -*-

# === メッセージの振り分けルールの管理用モデル
class MessageRule < ActiveRecord::Base
  belongs_to :user
  belongs_to :message_folder

  # === 振り分けルールに従って引数で指定されたメッセージを振り分ける
  def execute_rule(message)
    raise "Invalid method called." unless self.class.target_columns.collect{|pair| pair[1]}.include?(self.target_column)
    case self.rule_type
    when "full"
      if message.__send__(self.target_column) == self.rule_value
        self.message_folder.messages << message
      end
    when "regexp"
      if message.__send__(self.target_column) =~ Regexp.new(self.rule_value)
        self.message_folder.messages << message
      end
    end
  end

  # === 振り分け基準に使えるカラムの一覧を配列で返す
  def self.target_columns
    return [[I18n.t("sns.message_filter_targets.subject"), "subject"],
            [I18n.t("sns.message_filter_targets.to_addr"), "to_addrs"],
            [I18n.t("sns.message_filter_targets.cc_addr"), "cc_addrs"],
            [I18n.t("sns.message_filter_targets.body"),    "body"]]
  end

  # === 振り分けルールの種別一覧を配列で返す
  def self.rule_types
    return [[I18n.t("sns.message_rule_types.full"), "full"],
            [I18n.t("sns.message_rule_types.regexp"), "regexp"]]
  end
end
